package java_thinking.unit_21._21_7;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @Desc:   7-8 不要再外部线程中安排中断 不要这么做
 *          1.由于 timedRun 可以从任意一个线程中调用，因此它无法知道这个调用者线程中断策略，如果
 *            任务在超时之前完成，那么中断 timedRun 所在线程的取消任务将在 timedRun 返回到调用者
 *            之后启动，我们不知道这个取消任务会运行什么代码，但这结果不一定是好的，但是如果任务不
 *            响应中断，那么 timedRun 会在任务结束时才返回，此时可能已经超过了指定的时限，或者没有
 *            如果这时调用者是一个限时运行的任务，那么对调用者将带来负面的影响
 * @author: cww
 * @DateTime: 2019/6/14 8:54
 */

public class TimedRun1 {
    private static final ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
    public static void timeRun(Runnable r, long time, TimeUnit unit) {
        final Thread taskThread = Thread.currentThread();
        service.schedule(new Runnable() {
            @Override
            public void run() {
                taskThread.interrupt();
            }
        },time,unit);
        r.run();
    }
}
